package demo;

import java.util.concurrent.atomic.AtomicInteger;

public class CasDemo {
    /*****
     * CAS：compare and swap
     * CAS涉及到三个参数：
     * 1、内存位置 V
     * 2、预期值 A
     * 3、新值 B
     * 处理逻辑：
     * 比较内存位置V的当前值是否等于预期值A
     * 若等于：则用新值B更新内存位置的值
     * 若不等于：则不更新，并返回当前值
     */


    private AtomicInteger count = new AtomicInteger(1);

    public void increment() {
        int expectedValue;
        int newValue;
        do {
            expectedValue = count.get();
            newValue = expectedValue + 1;
        }while(!count.compareAndSet(expectedValue, newValue));
    }

    public int getValue() {
        return count.get();
    }




    public static void main(String[] args) {
        CasDemo casDemo = new CasDemo();
        casDemo.increment();
        System.out.println(casDemo.getValue());
    }
}
